export type FileType = 'word' | 'excel' | 'ppt' | 'pdf' | 'keynote' | 'settings' | 
                      'image' | 'gif' | 'audio' | 'video' | 'archive' | 'todo' |
                      'book' | 'lock' | 'code' | 'markdown' | 'default';

// Content type mappings
export const contentTypeMap: Record<string, FileType> = {
    // Word documents
    'application/msword': 'word',
    'application/vnd.openxmlformats-officedocument.wordprocessingml.document': 'word',
    'application/vnd.oasis.opendocument.text': 'word',
    
    // Excel
    'application/vnd.ms-excel': 'excel',
    'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': 'excel',
    'application/vnd.oasis.opendocument.spreadsheet': 'excel',
    
    // PowerPoint
    'application/vnd.ms-powerpoint': 'ppt',
    'application/vnd.openxmlformats-officedocument.presentationml.presentation': 'ppt',
    
    // Keynote
    'application/vnd.apple.keynote': 'keynote',
    
    // Images
    'image/jpeg': 'image',
    'image/png': 'image',
    'image/svg+xml': 'image',
    'image/gif': 'gif',
    
    // Video
    'video/mp4': 'video',
    'video/quicktime': 'video',
    'video/x-msvideo': 'video',
    'video/webm': 'video',
    
    // Audio
    'audio/mpeg': 'audio',
    'audio/wav': 'audio',
    'audio/ogg': 'audio',
    
    // Archives
    'application/zip': 'archive',
    'application/x-rar-compressed': 'archive',
    'application/x-7z-compressed': 'archive',
    
    // PDF
    'application/pdf': 'pdf',
    
    // Code & Text
    'text/javascript': 'code',
    'application/json': 'code',
    'text/html': 'code',
    'text/css': 'code',
    'text/markdown': 'markdown',
    'text/plain': 'default'
};

// Extension mappings as fallback
export const extensionMap: Record<string, FileType> = {
    // Word documents
    'doc': 'word',
    'docx': 'word',
    'odt': 'word',
    
    // Excel
    'xls': 'excel',
    'xlsx': 'excel',
    'ods': 'excel',
    'csv': 'excel',
    
    // PowerPoint
    'ppt': 'ppt',
    'pptx': 'ppt',
    'odp': 'ppt',
    
    // Keynote
    'key': 'keynote',
    
    // Images
    'jpg': 'image',
    'jpeg': 'image',
    'png': 'image',
    'svg': 'image',
    'gif': 'gif',
    
    // Video
    'mp4': 'video',
    'mov': 'video',
    'avi': 'video',
    'webm': 'video',
    
    // Audio
    'mp3': 'audio',
    'wav': 'audio',
    'ogg': 'audio',
    
    // Archives
    'zip': 'archive',
    'rar': 'archive',
    '7z': 'archive',
    
    // PDF
    'pdf': 'pdf',
    
    // Code & Text
    'js': 'code',
    'ts': 'code',
    'jsx': 'code',
    'tsx': 'code',
    'json': 'code',
    'html': 'code',
    'css': 'code',
    'scss': 'code',
    'less': 'code',
    'py': 'code',
    'rb': 'code',
    'php': 'code',
    'java': 'code',
    'cpp': 'code',
    'c': 'code',
    'go': 'code',
    'rs': 'code',
    
    // Markdown
    'md': 'markdown',
    'markdown': 'markdown',
    
    // Text
    'txt': 'default',
    'log': 'default'
};

export const previewableExtensions: Record<string, FileType> = {
    // Images
    'jpg': 'image',
    'jpeg': 'image',
    'png': 'image',
    'gif': 'image',
    'webp': 'image',
    
    // Documents
    'pdf': 'pdf',
    
    // Audio
    'mp3': 'audio',
    'wav': 'audio',
    'ogg': 'audio',
    
    // Video
    'mp4': 'video',
    'webm': 'video'
};

export function getFileExtension(filename: string): string | undefined {
    return filename.split('.').pop()?.toLowerCase();
}

export function getFileTypeFromName(filename: string): FileType {
    const extension = getFileExtension(filename);
    return extension ? extensionMap[extension] || 'default' : 'default';
}

export function getFileTypeFromMime(contentType?: string): FileType {
    return contentType ? contentTypeMap[contentType] || 'default' : 'default';
}
